/*
Q:Go语言中的slice和数组有什么区别
A:在Go语言中，数组和切片都是用于存储一组相同类型的元素，他们的区别在于长度的固定性和灵活性
数组的长度是固定的，而切片的长度是可变的
*/

package main

import "fmt"

func main() {
	// 创建一个切片
	numbers := []int{1, 2, 3, 4, 5}

	// 向切片中添加元素
	numbers = append(numbers, 6)
	numbers = append(numbers, 7, 8, 9)

	// 打印切片的内容
	fmt.Println(numbers)

	removeSliceTest()
	removeSliceTest2()
}

/*
在上述代码中，我们使用[]int语法创建了一个切片numbers，并初始化了一些整数。然后，我们使用append函数向切片中添加元素。
通过使用切片，我们可以动态地添加和删除元素，而不需要事先指定切片的长度。
需要注意的是，切片是基于数组的一种封装，它提供了更便捷的操作和灵活性。切片的底层是一个指向数组的指针，它包含了切片的长度和容量信息。
以上是关于Go语言中切片和数组的区别以及使用切片的示例。切片是Go语言中常用的数据结构，它提供了更灵活的长度和操作方式，适用于动态变化的数据集合。
*/

/*
切片移除
*/

func removeSliceTest() {
	numbers := []int{1, 2, 3, 4, 5}
	fmt.Println(numbers)
	removeIndex := 2
	numbers = append(numbers[:removeIndex], numbers[removeIndex+1:]...)
	fmt.Println(numbers)
}

func removeSliceTest2() {
	numbers := []int{1, 2, 3, 4, 5, 6, 7, 8}
	fmt.Println(numbers)
	for i, value := range numbers {
		if value == 6 {
			numbers = append(numbers[:i], numbers[i+1:]...)
		}
	}
	fmt.Println(numbers)
}
